package cc.chenwenxi.sdk.demo;

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class ControlGpio {
	public static void main(String[] args) throws InterruptedException {

		System.out.println("< -  Pi4J  - > GPIO控制示例...已启动。");

		// 创建gpio控制器
		final GpioController gpio = GpioFactory.getInstance();

		// 将gpio引脚＃01设置为输出引脚并打开
		final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.HIGH);
		// 设置此引脚的关闭状态
		pin.setShutdownOptions(true, PinState.LOW);

		System.out.println(" - > GPIO状态应为：ON");

		Thread.sleep(5000);

		// 关闭gpio pin＃01
		pin.low();
		System.out.println(" - > GPIO状态应为：OFF");

		Thread.sleep(5000);

		// 切换gpio pin＃01的当前状态(应该打开)
		pin.toggle();
		System.out.println(" - > GPIO状态应为：ON");

		Thread.sleep(5000);

		// 切换gpio pin＃01的当前状态(应该关闭)
		pin.toggle();
		System.out.println(" - > GPIO状态应为：OFF");

		Thread.sleep(5000);

		// 打开gpio pin＃01 1秒然后关闭
		System.out.println(" - > GPIO状态应为：ON仅1秒");
		pin.pulse(1000, true); // 将第二个参数设置为'true'使用阻塞调用

		// 通过关闭GPIO控制器来停止所有GPIO活动/线程
		// (此方法将强制关闭所有GPIO监视线程和计划任务)
		gpio.shutdown();

		System.out.println("退出ControlGpioExample");
	}
}
